\subsubsection*{A specifikáció változása}

A megváltozott feladatkiírásban szereplő ,,húsvéti nyuszi'' a modellünkben egy
szabály leszármazott osztály lesz (\verb+Bunny+). Ezt a \verb+TrafficLight+-hoz
hasonlóan elhelyezzük egy \verb+RoadSegmentWrapper+-en, és az állapotát véletlenszerűen
változtatja (a prototípusban még kikapcsolható a véletlenszű viselkedés).

\subsubsection{Az interfész általános leírása}

A program prototípusa egy konzolos megjelenítői felületen keresztül lesz
használható, melyben a fejlesztőcsapat által implementált parancsok alkalmazhatók. 
A fejlesztési folyamat ezen szakasza képet ad a program és az azt
leíró rendszer belső működéséről, de a skeletonnal ellentétben már nem az
egyes függvényhívások egymás utáni lefutását teszi ellenőrizhetővé, hanem
a konkrét működést mutatja be. A program vezérlése egy bemeneti fájlok
segítségével történik, melyek a következő szakaszban tárgyalt módon épülnek
fel. A játék aktuális állapota lekérhető, ennek formáját a ,,kimeneti nyelv''
szakasz specifikálja.

\subsubsection{Bemeneti nyelv}

A bemeneti nyelv egy imperatív nyelvre hasonlító, egyszerű működésű nyelv,
vezérlési szerkezetek nélkül. Minden utasítása 
\begin{verbatim}
<PARANCS>([Param1, param2 ... paramN])
\end{verbatim}
felépítésű.

\paragraph{Konstrukció}

Az alábbiakban a pálya építéséhez használható utasításokat mutatjuk be. Az első,
\verb+key+ nevű paraméter a választott (string) azonosító, amit nem közelező
megadni, de ilyenkor \verb+*+ karakterrel kell a helyét kitölteni.

\begin{enumerate}
  \item \verb+create_rs(key)+: RoadSegment (útelem) létrehozása.
  \item \verb+create_drainRS(key)+: Nyelő útelem létrehozása.
  \item \verb+create_sourceRS(key)+: Forrás útelem létrehozása.
  \item \verb+create_psRS(key)+: PoliceStation útelem létrehozása.
  \item \verb+create_bank(key)+: Bank létrehozása.
  \item \verb+create_hideOut(key)+: Rejtekhely útelem létrehozása.
  \item \verb+connect_rs(key, id_from, id_to)+: Összeköti a paramérként
  kapott azonosítójú útelemeket olyan módon, hogy az \verb+id_from+ azonosítójú
  útelemből indul a kapcsolat (tehát onnan kimenő lesz, az \verb+id_to+-nál
  bejövő).
  \item \verb+create_civilian(key, rs_key)+: A paraméterként megadott
  azonosítójú útelemen létrehoz egy Civil járművet.
  \item \verb+create_police(key, rs_key)+: A paraméterként megadott azonosítójú
  útelemen létrehoz egy Rendőr járművet.
  \item \verb+create_player(key, rs_key)+: A paraméterként megadott azonosítójú
  útelemen létrehoz egy Játékos által vezérelt járművet.
  \item \verb+create_stopTable(key, rsw_key)+: A paraméterként megadott
  azonosítójú útelemcsomagolón létrehoz egy stoptábla szabályt.
  \item \verb+create_trafficLight(key, rsw_key)+: A paraméterként megadott
  azonosítójú útelemcsomagolón létrehoz egy közlekedési lámpát. 
  \item \verb+create_bunny(key, rsw_key)+: A paraméterként megadott
  azonosítójú útelemcsomagolón létrehoz egy ,,húsvéti nyúl'' szabályt.
  \item \verb+set_worldDimensions(x, y)+: A világ ,,x'' és ,,y'' kiterjedését
  adja meg.
\end{enumerate}

\paragraph{Vezérlés} 

Az alábbiakban a játék vezérlését leíró utasításokat soroljuk fel.

\begin{enumerate}
  \item \verb+step(n)+: Kivált \textit{n} darab órajelütést.
  \item \verb+change_direction(angle)+: Megváltoztatja a mozgás irányát az
  adott szög irányába (0° - ,,3 óra'', 90° - ,,12 óra'', stb.)
  \item \verb+set_interactiveMode(b)+: Kikapcsolja a random döntéseket;
  ilyenkor a program megkérdezi a felhasználót. 
  \item \verb+exit()+: Kilép a programból
  \item \verb+display(key)+: Kiírja a paraméterül kapott azonosítójú
  objektum állapotát, vagy a paraméter elhagyása esetén kiír egy összegfoglalást
  a játék és a benne lévő objektumok állapotáról (az objektumok saját állapotukat a toString metódusuk segítségével írják ki).
  \item \verb+toggle_trafficLight(key)+: A key azonosítójú trafficlight
  állapotát az ellenkezőre állítja. Ez automatikusan is megtörténne, ha nem
  hívjuk meg ezt a parancsot. 
  \item \verb+toggle_bunny(key)+: A key azonosítójú Bunny
  állapotát az ellenkezőre állítja. Ez automatikusan is megtörténne, ha nem
  hívjuk meg ezt a parancsot.
\end{enumerate}

\subsubsection{Kimeneti nyelv}

A \verb+display()+ parancs által megjelenített kimenet a következőképpen épül
fel:

\begin{itemize}
  \item A tárolt elemek hashtábláján minden elemre meghívódik a toString()
  metódus, melyet a releváns esetekben felülírtunk.
  \item Ez mindig kiírja az objektum osztályának nevét, valamit a saját belső
  állapotát.
\end{itemize}

Minden egyéb parancs nyugtázó szöveggel tér vissza (konstrukciós parancsok
esetében a létrehozott objektum azonosítóját is megjeleníti, akkor is, ha azt a
felhasználó nem adta meg).
